﻿/*
 * Mr.Chau
 * 20/05/2013
 */
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NangLuongTieuDiemDTO.DTO;
using NangLuongTieuDiemBUS;
using DevExpress.XtraGrid.Views.Grid;

namespace NangLuongTieuDiemGUI.NangLuongTieuDiemUserControl
{
    public partial class ucNhapThietBiDien : UserControl
    {
        #region "[Tạo event và delegate để mở usercontrol Lập Hóa đơn]"
       // public delegate void ClearItem();
        //public event ClearItem ItemEvent;
        public DelegateShowItem showItem = null;

        public DelegateShowImportExcel showUcNhapThietBiTuFileExcel = null;
        #endregion

        #region "[Khai báo biến toàn cục]"
        //danh sách các Thiết bị mà khách hàng vửa thêm
        private static List<ThietBiDienDTO> listThietBis = new List<ThietBiDienDTO>();

        /// <summary>
        ///Mã thiết bị điện người dùng đang chọn
        /// </summary>
        private int m_IDThietBiDenInfo = -1;
        #endregion

        #region "[khởi tạo mặc định]"
        public ucNhapThietBiDien()
        {
            InitializeComponent();
        }
        #endregion

        #region "[Load]"
        private void ucNhapThietBiDien_Load(object sender, EventArgs e)
        {
            try {
                EnableControlButton(true);
                LoadDataGridView();
            }
            catch(Exception ex) 
            {
                InSert_LoiHeThong("ucNhapThietBiDien_Load", ex);
            }
        }

        #endregion

        #region "[xét trạng thái của các nút]"
        /// <summary>
        ///  xét trạng thái của các nút
        /// </summary>
        /// <param name="_IsFlag">Trạng thái</param>
        private void EnableControlButton(bool _IsFlag)
        {
            try {
                btnThem.Enabled = _IsFlag;
                btnXoa.Enabled = btnCapNhatThietBiDien.Enabled = !_IsFlag;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("EnableControlButton", ex);
            }
        }
        #endregion

        #region "[Thêm 1 thiết bị điện]"
        private void btnThem_Click(object sender, EventArgs e)
        {
            try {
                if (CheckBeforInsert())
                { 
                    //thêm 1 thiết bị điện
                    ThietBiDienDTO ItemInsert = new ThietBiDienDTO();
                    ItemInsert.TenThietBiDien = txtTenThietBiDien.Text.Trim();
                    ItemInsert.CongSuat = double.Parse(txtCongSuat.Text.Trim());
                    ItemInsert.CongSuatHaoHut = 0;
                    ItemInsert.HeSoDeBa = 0;
                    ItemInsert.Xoa = false;
                    ItemInsert.GhiChu = txtGhiChu.Text.Trim();
                    if (txtCongSuatHaoHut.Text != string.Empty)
                        ItemInsert.CongSuatHaoHut = double.Parse(txtCongSuatHaoHut.Text.Trim());
                    if (txtHeSoDeBa.Text != string.Empty)
                        ItemInsert.HeSoDeBa = double.Parse(txtHeSoDeBa.Text.Trim());

                    int ID = NangLuongTieuDiem_Management.ThietBiDien_Insert(ItemInsert);
                    if (ID > 0)
                    {
                        ItemInsert.ID = ID;
                        listThietBis.Add(ItemInsert);
                        //insert thành công.
                        LoadDataGridView();
                        ClearControlInput();
                    }
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnThem_Click", ex);
            }
        }

        /// <summary>
        /// Kiểm tra trước khi 
        /// </summary>
        /// <returns></returns>
        private bool CheckBeforInsert()
        {
            try {
                if (txtTenThietBiDien.Text.Trim().Length == 0)
                {
                    ClassUtils.Utils.MassageBoxErrorOtInformation("Tên thiết bị không được bỏ trống", "Thông Báo", true);
                    return false;
                }
                if (txtCongSuat.Text.Trim().Length == 0)
                {
                    ClassUtils.Utils.MassageBoxErrorOtInformation("Cong suất thiết bị không được bỏ trống", "Thông Báo", true);
                    return false;
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("CheckBeforInsert", ex);
            }
            return true;
        }
        #endregion

        #region  "[Xóa dữ liệu trên các control nhập liệu]"
        /// <summary>
        /// Xóa dữ liệu trên các control nhập liệu
        /// </summary>
        private void ClearControlInput()
        {
            try {
                txtTenThietBiDien.Text = txtCongSuat.Text = txtCongSuatHaoHut.Text = txtGhiChu.Text = txtHeSoDeBa.Text = string.Empty;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("ClearControlInput", ex);
            }
        }
        #endregion

        #region "[Load dữ liệu trên datagridview]"
        /// <summary>
        /// Load dữ liệu trên datagridview
        /// </summary>
        private void LoadDataGridView()
        {
            try {
                List<ThietBiDienDTO> listShow = new List<ThietBiDienDTO>();

                //lấy danh sách tất cả các thiết bị điện
                List<ThietBiDienDTO> listAll = NangLuongTieuDiem_Management.ThietBiDien_GetAll().Where(p => p.Xoa == false).ToList();

                //xóa các thiết bị mà khách hàng mới vừa insert
                foreach(ThietBiDienDTO Item in listThietBis)
                {
                    listShow.Add(Item);
                    ThietBiDienDTO ItemDel = listAll.Where(p => p.ID == Item.ID).FirstOrDefault();
                    if (ItemDel != null)
                        listAll.Remove(ItemDel);
                }
                foreach (ThietBiDienDTO Item in listAll)
                {
                    listShow.Add(Item);
                }
                dgvHienThi.DataSource = listShow;
                dgvHienThi.RefreshDataSource();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("LoadDataGridView", ex);
            }
        }
        #endregion

        #region "[Cập nhật thiết bị điện]"
        private void btnCapNhatThietBiDien_Click(object sender, EventArgs e)
        {
            try {
                if (m_IDThietBiDenInfo > 0)
                { 
                    //cap nhat thong tin thiet bi dien
                    ThietBiDienDTO objInfo = NangLuongTieuDiem_Management.ThietBiDien_SelectByPrimaryKey(m_IDThietBiDenInfo);
                    if (objInfo != null)
                    {
                        objInfo.TenThietBiDien = txtTenThietBiDien.Text;
                        objInfo.CongSuatHaoHut = double.Parse(txtCongSuatHaoHut.Text.Trim());
                        objInfo.CongSuat = double.Parse(txtCongSuat.Text.Trim());
                        objInfo.HeSoDeBa = double.Parse(txtHeSoDeBa.Text.Trim());
                        objInfo.GhiChu = txtGhiChu.Text;

                        bool ID = NangLuongTieuDiem_Management.ThietBiDien_Update(objInfo);
                        if (ID )
                        {
                            LoadDataGridView();
                            EnableControlButton(true);
                            m_IDThietBiDenInfo = -1;
                            ClearControlInput();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnCapNhatThietBiDien_Click", ex);
            }
        }
        #endregion

        #region "[Xóa]"
        private void btnXoa_Click(object sender, EventArgs e)
        {
            try {
                if (m_IDThietBiDenInfo > 0)
                {
                     ThietBiDienDTO ItemInfo = NangLuongTieuDiem_Management.ThietBiDien_SelectByPrimaryKey(m_IDThietBiDenInfo);
                    ItemInfo.Xoa = true;
                    bool isSusscess = NangLuongTieuDiem_Management.ThietBiDien_Update(ItemInfo);
                    if (isSusscess)
                    {
                        ThietBiDienDTO ItemDel = listThietBis.Where(p => p.ID == m_IDThietBiDenInfo).FirstOrDefault();
                        listThietBis.Remove(ItemDel);
                        LoadDataGridView();
                        ClearControlInput();
                        m_IDThietBiDenInfo = -1;
                        EnableControlButton(true);
                    }
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnXoa_Click", ex);
            }
        }
        #endregion

        #region "[Xóa thẻ]"
        private void btnXoaThe_Click(object sender, EventArgs e)
        {
            try {
                ClearControlInput();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnXoaThe_Click", ex);
            }
        }
        #endregion

        #region "[Thoát]"
        private void btnThoat_Click(object sender, EventArgs e)
        {
            try
            {
                //if (ItemEvent != null)
                //    ItemEvent();

                if (showItem != null)
                    showItem(false);
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnThoat_Click", ex);
            }
            
        }
        #endregion

        #region "[Lấy thông tin trên 1 dòng trên lưới]"
        private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            try {
                ThietBiDienDTO ThietbidienInfo = (ThietBiDienDTO)gridView1.GetRow(e.RowHandle);
                if (ThietbidienInfo != null)
                {
                    txtCongSuat.Text = ThietbidienInfo.CongSuat.ToString();
                    txtCongSuatHaoHut.Text = ThietbidienInfo.CongSuatHaoHut.ToString();
                    txtGhiChu.Text = ThietbidienInfo.GhiChu;
                    txtHeSoDeBa.Text = ThietbidienInfo.HeSoDeBa.ToString();
                    txtTenThietBiDien.Text = ThietbidienInfo.TenThietBiDien;

                    m_IDThietBiDenInfo = ThietbidienInfo.ID;

                    EnableControlButton(false);
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("gridView1_RowClick", ex);
            }
        }
        #endregion

        #region "[Hủy thao tác đang thực hiện]"
        private void btnHuy_Click(object sender, EventArgs e)
        {
            try
            {
                m_IDThietBiDenInfo = -1;
                ClearControlInput();
                EnableControlButton(true);
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnHuy_Click", ex);
            }
        }
        #endregion

        #region "[Đánh số thứ tự]"
        private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            try {
                if (e.Column.Name == "colSTT")
                    e.DisplayText = (e.RowHandle + 1).ToString();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("gridView1_CustomDrawCell", ex);
            }
        }
        #endregion

        #region "[Tô màu 1 dòng gridview]"
        private void gridView1_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
            try {
                GridView View = sender as GridView;
                //(string)view.GetRowCellValue(e.RowHandle, view.Columns["colSoLuongTon"];

                //lấy thông tin sản phẩm trên 1 dòng.
                ThietBiDienDTO ItemInfo = (ThietBiDienDTO)gridView1.GetRow(e.RowHandle);
                if (ItemInfo != null)
                {
                    if (CheckExistItemInListObject(ItemInfo.ID,listThietBis))
                    {
                        e.Appearance.BackColor = Color.Pink;
                    }
                    if (e.RowHandle == View.FocusedRowHandle)
                    {
                        e.Appearance.BackColor = Color.Pink;
                    }
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("gridView1_RowStyle", ex);
            }
        }
        #endregion

        #region "[kiểm tra 1 phần tử có nằm trong Mảng đối tượng hay không?]"
        /// <summary>
        /// kiểm tra 1 phần tử có nằm trong Mảng đối tượng hay không?
        /// </summary>
        /// <param name="_ID"></param>
        /// <param name="_listObj"></param>
        /// <returns></returns>
        public static bool CheckExistItemInListObject(int _ID, List<ThietBiDienDTO> _listObj)
        {
            bool isSuccess = false;
            try
            {
                foreach (ThietBiDienDTO Item in _listObj)
                {
                    if (Item.ID == _ID)
                        return true;
                }
            }
            catch{}
                    return isSuccess;
        }
        #endregion

        #region "[không chi người dùng nhập chữ]"
        private void txtCongSuat_KeyPress(object sender, KeyPressEventArgs e)
        {
            try {
                if (!char.IsControl(e.KeyChar) && !char.IsNumber(e.KeyChar))
                    e.Handled = true;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtCongSuat_KeyPress", ex);
            }
        }

        private void txtCongSuatHaoHut_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (!char.IsControl(e.KeyChar) && !char.IsNumber(e.KeyChar))
                    e.Handled = true;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtCongSuatHaoHut_KeyPress", ex);
            }
        }

        private void txtHeSoDeBa_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (!char.IsControl(e.KeyChar) && !char.IsNumber(e.KeyChar))
                    e.Handled = true;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtHeSoDeBa_KeyPress", ex);
            }
        }
        #endregion

        #region "[Hàm nhập từ file excel]"
        private void btnNhapTuFileExcel_Click(object sender, EventArgs e)
        {
            try {
                if (showUcNhapThietBiTuFileExcel != null)
                    showUcNhapThietBiTuFileExcel();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnNhapTuFileExcel_Click", ex);
            }
        }
        #endregion

        #region "[Hàm insert lỗi hệ thống]"
        public void InSert_LoiHeThong(string TenHam, Exception ex)
        {
            LoiHeThongDTO lhtDto = new LoiHeThongDTO();
            lhtDto.TenLoi = ex.Message.ToString();
            lhtDto.NgayTao = DateTime.Now;
            lhtDto.TenHamBiLoi = TenHam;
            lhtDto.SuaLoi = false;
            lhtDto.GhiChu = "";
            NangLuongTieuDiem_Management.LoiHeThong_Insert(lhtDto);
            MessageBox.Show(lhtDto.TenLoi);
        }
        #endregion
    }
}
